package com.physics.mps.module.task;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.physics.mps.common.util.AssertUtil;
import com.physics.mps.entity.dto.AppParamEntity;
import com.physics.mps.entity.dto.AppParamGroupEntity;
import com.physics.mps.entity.dto.SubTaskEntity;
import com.physics.mps.entity.enums.CodeEnum;
import com.physics.mps.entity.vo.TaskParamVo;
import com.physics.mps.mapper.SubTaskMapper;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.util.List;
import java.util.Map;

/**
 * @author mcsoft
 * @since 2023/9/11
 */
@Slf4j
@Service
@Transactional(rollbackFor = Exception.class)
@RequiredArgsConstructor
public class TaskService extends ServiceImpl<SubTaskMapper, SubTaskEntity> {

    // ~ Variable & Constant
    // ========================================================================================================


    // ~ Public method
    // ========================================================================================================

    /**
     * 根据用户ID与主任务ID查询子任务
     * TODO：
     * 1、根据名称排序、根据创建时间排序
     * 2、根据查询条件搜索
     * 3、分页查询
     */
    public List<SubTaskEntity> getTaskList(TaskParamVo taskParamVo) {
        AssertUtil.isBlank(taskParamVo.getUserId(), CodeEnum.USER_ID_IS_BLANK);
        AssertUtil.isBlank(taskParamVo.getTaskId(), CodeEnum.TASK_ID_IS_BLANK);

        LambdaQueryWrapper<SubTaskEntity> queryWrapper = new LambdaQueryWrapper<>();
        queryWrapper.eq(SubTaskEntity::getUserId, taskParamVo.getUserId());
        queryWrapper.eq(SubTaskEntity::getTaskId, taskParamVo.getTaskId());
        return super.list();
    }

    public List<SubTaskEntity> search(TaskParamVo taskParamVo) {
        return null;
    }


    public List<Map<String, AppParamEntity>> getComputeMapList(TaskParamVo taskParamVo) {
        return null;
    }

    public List<AppParamGroupEntity> getAppModuleList(TaskParamVo taskParamVo) {
        return null;
    }

    public List<AppParamEntity> getAppParamList(TaskParamVo taskParamVo) {
        // TODO 根据AppId与ModuleId查询出参数
        return null;
    }

    public void saveOrUpdateAppParamList(List<AppParamEntity> appParamList) {
        // 根据前端返回的内容，进行保存/更新

    }

    // ~ Override method
    // ========================================================================================================


    // ~ Private method
    // ========================================================================================================


    // ~ Autowired
    // ========================================================================================================


}
